

package com.hazelcast.query.impl;

import com.hazelcast.config.IndexConfig;
import com.hazelcast.instance.impl.Node;
import com.hazelcast.internal.monitor.impl.PerIndexStats;
import com.hazelcast.internal.serialization.InternalSerializationService;
import com.hazelcast.query.impl.getters.Extractors;

/**
 * Provides storage-specific indexes to {@link IndexRegistry
 * Indexes}.
 */
public interface IndexProvider {

    /**
     * Creates a new index with the given name.
     *
     * @param node         The node object
     * @param config       Index configuration.
     * @param extractors   the extractors to extract values of the given
     *                     name.
     * @param ss           the serialization service to perform the
     *                     deserialization of entries while extracting values
     *                     from them.
     * @param copyBehavior the desired index copy behaviour.
     * @param stats        the index stats instance to report the statistics to.
     * @param mapName      the name of the map being indexed
     * @return the created index instance.
     */
    @SuppressWarnings("checkstyle:ParameterNumber")
    InternalIndex createIndex(Node node, IndexConfig config, Extractors extractors, InternalSerializationService ss, IndexCopyBehavior copyBehavior, PerIndexStats stats, int partitionCount, int partitionId, String mapName);
}
